home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / x / volume11 / tgif / patch6.04 < prev    next >
Encoding:
Internet Message Format  |  1991-02-12  |  39.8 KB

  1. Path: uunet!lll-winken!sun-barr!newstop!exodus!CS.UCLA.EDU
  2. From: william@CS.UCLA.EDU (William Cheng)
  3. Newsgroups: comp.sources.x
  4. Subject: v11i066: tgif, Patch6, Part04/06
  5. Message-ID: <7936@exodus.Eng.Sun.COM>
  6. Date: 13 Feb 91 07:31:50 GMT
  7. References: <csx-11i063:tgif@uunet.UU.NET>
  8. Sender: news@exodus.Eng.Sun.COM
  9. Lines: 1270
  10. Approved: argv@sun.com
  11.  
  12. Submitted-by: william@CS.UCLA.EDU (William Cheng)
  13. Posting-number: Volume 11, Issue 66
  14. Archive-name: tgif/patch6.04
  15. Patch-To: tgif: Volume 7, Issue 56-76 (original: tgif-1.2)
  16. Patch-To: tgif: Volume 8, Issue 46-48 (Patch1: tgif-1.2 => tgif-1.9)
  17. Patch-To: tgif: Volume 8, Issue 58-60 (Patch2: tgif-1.9 => tgif-1.12)
  18. Patch-To: tgif: Volume 8, Issue 87-89 (Patch3: tgif-1.12 => tgif-1.13)
  19. Patch-To: tgif: Volume 8, Issue 94 (Patch4: tgif-1.13 => tgif-1.14)
  20. Patch-To: tgif: Volume 8, Issue 95 (Patch5: tgif-1.14 => tgif-1.15)
  21.  
  22. ---------------------------------> cut here <---------------------------------
  23. *** oval.c.orig    Wed Dec 12 14:36:17 1990
  24. --- oval.c    Wed Dec 12 14:36:19 1990
  25. ***************
  26. *** 6,10 ****
  27.   #ifndef lint
  28.   static char RCSid[] =
  29. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/oval.c,v 1.7 90/08/13 09:23:35 william Exp $";
  30.   #endif
  31.   
  32. --- 6,10 ----
  33.   #ifndef lint
  34.   static char RCSid[] =
  35. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/oval.c,v 1.11 90/11/10 13:51:00 william Exp $";
  36.   #endif
  37.   
  38. ***************
  39. *** 93,97 ****
  40.      struct ObjRec    * ObjPtr;
  41.   {
  42. !    int            ltx, lty, rbx, rby, xc, yc, a, b, fill, width, pen;
  43.   
  44.      ltx = ObjPtr->obbox.ltx; lty = ObjPtr->obbox.lty;
  45. --- 93,98 ----
  46.      struct ObjRec    * ObjPtr;
  47.   {
  48. !    int    ltx, lty, rbx, rby, xc, yc, a, b, i;
  49. !    int    fill, width, pen, dash, color_index;
  50.   
  51.      ltx = ObjPtr->obbox.ltx; lty = ObjPtr->obbox.lty;
  52. ***************
  53. *** 103,109 ****
  54. --- 104,120 ----
  55.      width = ObjPtr->detail.o->width;
  56.      pen = ObjPtr->detail.o->pen;
  57. +    dash = ObjPtr->detail.o->dash;
  58.   
  59.      if (fill == NONEPAT && pen == NONEPAT) return;
  60.   
  61. +    if (colorDump)
  62. +    {
  63. +       color_index = ObjPtr->color;
  64. +       fprintf (FP, "%.3f %.3f %.3f setrgbcolor\n",
  65. +             ((float)tgifColors[color_index].red/maxRGB),
  66. +             ((float)tgifColors[color_index].green/maxRGB),
  67. +             ((float)tgifColors[color_index].blue/maxRGB));
  68. +    }
  69.      switch (fill)
  70.      {
  71. ***************
  72. *** 128,131 ****
  73. --- 139,150 ----
  74.   
  75.      fprintf (FP, "%1d setlinewidth\n", widthOfLine[width]);
  76. +    if (dash != 0)
  77. +    {
  78. +       fprintf (FP, "[");
  79. +       for (i = 0; i < dashListLength[dash]-1; i++)
  80. +          fprintf (FP, "%1d ", (int)(dashList[dash][i]));
  81. +       fprintf (FP, "%1d] 0 setdash\n",
  82. +             (int)(dashList[dash][dashListLength[dash]-1]));
  83. +    }
  84.   
  85.      switch (pen)
  86. ***************
  87. *** 147,150 ****
  88. --- 166,170 ----
  89.            break;
  90.      }
  91. +    if (dash != 0) fprintf (FP, "[] 0 setdash\n");
  92.      fprintf (FP, "1 setlinewidth\n\n");
  93.   }
  94. ***************
  95. *** 156,160 ****
  96.   {
  97.      struct OvalRec    * oval_ptr = ObjPtr->detail.o;
  98. !    int            fill, width, pen, pixel, real_x_off, real_y_off;
  99.      char            s[80];
  100.      struct BBRec        bbox;
  101. --- 176,180 ----
  102.   {
  103.      struct OvalRec    * oval_ptr = ObjPtr->detail.o;
  104. !    int            fill, width, pen, dash, pixel, real_x_off, real_y_off;
  105.      char            s[80];
  106.      struct BBRec        bbox;
  107. ***************
  108. *** 171,174 ****
  109. --- 191,195 ----
  110.      width = ObjPtr->detail.o->width;
  111.      pen = ObjPtr->detail.o->pen;
  112. +    dash = ObjPtr->detail.o->dash;
  113.      pixel = colorPixels[ObjPtr->color];
  114.   
  115. ***************
  116. *** 191,197 ****
  117.         values.stipple = patPixmap[pen];
  118.         values.line_width = widthOfLine[width] >> zoomScale;
  119.         XChangeGC (mainDisplay, drawGC,
  120. !             GCForeground | GCFunction | GCFillStyle | GCStipple | GCLineWidth,
  121. !             &values);
  122.         XDrawArc (mainDisplay, window, drawGC, bbox.ltx, bbox.lty,
  123.               bbox.rbx-bbox.ltx, bbox.rby-bbox.lty, 0, 360*64);
  124. --- 212,226 ----
  125.         values.stipple = patPixmap[pen];
  126.         values.line_width = widthOfLine[width] >> zoomScale;
  127. +       if (dash != 0)
  128. +       {
  129. +          XSetDashes (mainDisplay, drawGC, 0, dashList[dash],
  130. +                dashListLength[dash]);
  131. +          values.line_style = LineOnOffDash;
  132. +       }
  133. +       else
  134. +          values.line_style = LineSolid;
  135.         XChangeGC (mainDisplay, drawGC,
  136. !             GCForeground | GCFunction | GCFillStyle | GCStipple | GCLineWidth |
  137. !             GCLineStyle, &values);
  138.         XDrawArc (mainDisplay, window, drawGC, bbox.ltx, bbox.lty,
  139.               bbox.rbx-bbox.ltx, bbox.rby-bbox.lty, 0, 360*64);
  140. ***************
  141. *** 211,214 ****
  142. --- 240,244 ----
  143.      oval_ptr->width = lineWidth;
  144.      oval_ptr->pen = penPat;
  145. +    oval_ptr->dash = curDash;
  146.   
  147.      obj_ptr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
  148. ***************
  149. *** 257,262 ****
  150.      values.fill_style = FillSolid;
  151.      values.line_width = 0;
  152.      XChangeGC (mainDisplay, drawGC,
  153. !       GCForeground | GCFunction | GCFillStyle | GCLineWidth, &values);
  154.   
  155.      grid_x = end_x = OrigX;
  156. --- 287,294 ----
  157.      values.fill_style = FillSolid;
  158.      values.line_width = 0;
  159. +    values.line_style = LineSolid;
  160.      XChangeGC (mainDisplay, drawGC,
  161. !          GCForeground | GCFunction | GCFillStyle | GCLineWidth | GCLineStyle,
  162. !          &values);
  163.   
  164.      grid_x = end_x = OrigX;
  165. ***************
  166. *** 333,341 ****
  167.      struct ObjRec    * ObjPtr;
  168.   {
  169. !    fprintf (FP, "oval(%s,", colorMenuItems[ObjPtr->color]);
  170. !    fprintf (FP, "%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,", ObjPtr->obbox.ltx,
  171.            ObjPtr->obbox.lty, ObjPtr->obbox.rbx, ObjPtr->obbox.rby,
  172.            ObjPtr->detail.o->fill, ObjPtr->detail.o->width,
  173. !          ObjPtr->detail.o->pen, ObjPtr->id);
  174.      SaveAttrs (FP, ObjPtr->lattr);
  175.      fprintf (FP, ")");
  176. --- 365,373 ----
  177.      struct ObjRec    * ObjPtr;
  178.   {
  179. !    fprintf (FP, "oval('%s',", colorMenuItems[ObjPtr->color]);
  180. !    fprintf (FP, "%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,", ObjPtr->obbox.ltx,
  181.            ObjPtr->obbox.lty, ObjPtr->obbox.rbx, ObjPtr->obbox.rby,
  182.            ObjPtr->detail.o->fill, ObjPtr->detail.o->width,
  183. !          ObjPtr->detail.o->pen, ObjPtr->id, ObjPtr->detail.o->dash);
  184.      SaveAttrs (FP, ObjPtr->lattr);
  185.      fprintf (FP, ")");
  186. ***************
  187. *** 348,352 ****
  188.      struct OvalRec    * oval_ptr;
  189.      char            color_str[20], * s;
  190. !    int            ltx, lty, rbx, rby, fill, width, pen, w;
  191.   
  192.      * ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
  193. --- 380,384 ----
  194.      struct OvalRec    * oval_ptr;
  195.      char            color_str[20], * s;
  196. !    int            ltx, lty, rbx, rby, fill, width, pen, dash, w;
  197.   
  198.      * ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
  199. ***************
  200. *** 365,368 ****
  201. --- 397,401 ----
  202.         }
  203.         (*ObjPtr)->id = objId++;
  204. +       dash = 0;
  205.      }
  206.      else if (fileVersion <= 7)
  207. ***************
  208. *** 371,376 ****
  209.               <x, <y, &rbx, &rby, &fill, &width, &pen);
  210.         (*ObjPtr)->id = objId++;
  211.      }
  212. !    else
  213.      {
  214.         sscanf (s, "%d , %d, %d , %d , %d , %d , %d , %d",
  215. --- 404,410 ----
  216.               <x, <y, &rbx, &rby, &fill, &width, &pen);
  217.         (*ObjPtr)->id = objId++;
  218. +       dash = 0;
  219.      }
  220. !    else if (fileVersion <= 8)
  221.      {
  222.         sscanf (s, "%d , %d, %d , %d , %d , %d , %d , %d",
  223. ***************
  224. *** 377,381 ****
  225. --- 411,423 ----
  226.               <x, <y, &rbx, &rby, &fill, &width, &pen, &((*ObjPtr)->id));
  227.         if ((*ObjPtr)->id >= objId) objId = (*ObjPtr)->id + 1;
  228. +       dash = 0;
  229.      }
  230. +    else
  231. +    {
  232. +       sscanf (s, "%d , %d, %d , %d , %d , %d , %d , %d , %d",
  233. +             <x, <y, &rbx, &rby, &fill, &width, &pen, &((*ObjPtr)->id),
  234. +             &dash);
  235. +       if ((*ObjPtr)->id >= objId) objId = (*ObjPtr)->id + 1;
  236. +    }
  237.   
  238.      oval_ptr->fill = fill;
  239. ***************
  240. *** 382,385 ****
  241. --- 424,428 ----
  242.      oval_ptr->width = width;
  243.      oval_ptr->pen = pen;
  244. +    oval_ptr->dash = dash;
  245.      (*ObjPtr)->x = ltx;
  246.      (*ObjPtr)->y = lty;
  247. *** pattern.c.orig    Wed Dec 12 14:36:26 1990
  248. --- pattern.c    Wed Dec 12 14:36:29 1990
  249. ***************
  250. *** 6,10 ****
  251.   #ifndef lint
  252.   static char RCSid[] =
  253. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/pattern.c,v 1.3 90/07/11 21:30:41 william Exp $";
  254.   #endif
  255.   
  256. --- 6,10 ----
  257.   #ifndef lint
  258.   static char RCSid[] =
  259. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/pattern.c,v 1.5 90/10/31 11:37:19 william Exp $";
  260.   #endif
  261.   
  262. ***************
  263. *** 30,33 ****
  264. --- 30,34 ----
  265.   int     penPat = SOLIDPAT;
  266.   int     curSpline = LT_STRAIGHT;
  267. + int     curDash = 0;
  268.   
  269.   void ModeMenu (X, Y)
  270. ***************
  271. *** 505,508 ****
  272. --- 506,624 ----
  273.   }
  274.   
  275. + static
  276. + int ChangeObjDashes (ObjPtr, DashIndex)
  277. +    struct ObjRec    * ObjPtr;
  278. +    int            DashIndex;
  279. + {
  280. +    register struct ObjRec    * obj_ptr;
  281. +    int                changed = FALSE;
  282. +    for (obj_ptr = ObjPtr; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
  283. +       switch (obj_ptr->type)
  284. +       {
  285. +          case OBJ_POLY:
  286. +             if (obj_ptr->detail.p->dash != DashIndex)
  287. +             {
  288. +                obj_ptr->detail.p->dash = DashIndex;
  289. +                changed = TRUE;
  290. +             }
  291. +             break;
  292. +          case OBJ_BOX:
  293. +             if (obj_ptr->detail.b->dash != DashIndex)
  294. +             {
  295. +                obj_ptr->detail.b->dash = DashIndex;
  296. +                changed = TRUE;
  297. +             }
  298. +             break;
  299. +          case OBJ_OVAL:
  300. +             if (obj_ptr->detail.o->dash != DashIndex)
  301. +             {
  302. +                obj_ptr->detail.o->dash = DashIndex;
  303. +                changed = TRUE;
  304. +             }
  305. +             break;
  306. +          case OBJ_POLYGON:
  307. +             if (obj_ptr->detail.g->dash != DashIndex)
  308. +             {
  309. +                obj_ptr->detail.g->dash = DashIndex;
  310. +                changed = TRUE;
  311. +             }
  312. +             break;
  313. +          case OBJ_GROUP:
  314. +          case OBJ_SYM:
  315. +             if (ChangeObjLineWidth (obj_ptr->detail.r->last, DashIndex))
  316. +                changed = TRUE;
  317. +             break;
  318. +       }
  319. +    return (changed);
  320. + }
  321. + void ChangeAllSelDashes (DashIndex)
  322. +    int    DashIndex;
  323. + {
  324. +    register struct SelRec    * sel_ptr;
  325. +    register struct ObjRec    * obj_ptr;
  326. +    int                changed = FALSE;
  327. +    if (topSel == NULL)
  328. +    {
  329. +       curDash = DashIndex;
  330. +       ShowLineWidth ();
  331. +       return;
  332. +    }
  333. +    for (sel_ptr = botSel; sel_ptr != NULL; sel_ptr = sel_ptr->prev)
  334. +    {
  335. +       obj_ptr = sel_ptr->obj;
  336. +       switch (obj_ptr->type)
  337. +       {
  338. +          case OBJ_POLY:
  339. +             if (obj_ptr->detail.p->dash != DashIndex)
  340. +             {
  341. +                obj_ptr->detail.p->dash = DashIndex;
  342. +                changed = TRUE;
  343. +             }
  344. +             break;
  345. +          case OBJ_BOX:
  346. +             if (obj_ptr->detail.b->dash != DashIndex)
  347. +             {
  348. +                obj_ptr->detail.b->dash = DashIndex;
  349. +                changed = TRUE;
  350. +             }
  351. +             break;
  352. +          case OBJ_OVAL:
  353. +             if (obj_ptr->detail.o->dash != DashIndex)
  354. +             {
  355. +                obj_ptr->detail.o->dash = DashIndex;
  356. +                changed = TRUE;
  357. +             }
  358. +             break;
  359. +          case OBJ_POLYGON:
  360. +             if (obj_ptr->detail.g->dash != DashIndex)
  361. +             {
  362. +                obj_ptr->detail.g->dash = DashIndex;
  363. +                changed = TRUE;
  364. +             }
  365. +             break;
  366. +          case OBJ_GROUP:
  367. +          case OBJ_SYM:
  368. +             if (ChangeObjDashes (obj_ptr->detail.r->last, DashIndex))
  369. +                changed = TRUE;
  370. +             break;
  371. +       }
  372. +    }
  373. +    if (changed)
  374. +    {
  375. +       SetFileModified (TRUE);
  376. +       HighLightReverse ();
  377. +       RedrawAnArea (botObj, selLtX-(1<<zoomScale), selLtY-(1<<zoomScale),
  378. +             selRbX+(1<<zoomScale), selRbY+(1<<zoomScale));
  379. +       HighLightForward ();
  380. +    }
  381. + }
  382.   void LineStyleMenu (X, Y)
  383.      int    X, Y;
  384. ***************
  385. *** 510,519 ****
  386.      int        index, ltx, lty, rbx, rby, * fore_colors, * valid;
  387.   
  388. !    DefaultColorArrays (MAXLINEWIDTHS+MAXLINETYPES+MAXLINESTYLES, &fore_colors,
  389. !          &valid);
  390.      cfree (valid);
  391.      index = PxMpMenuLoop (X, Y, menuImageW, menuImageH,
  392. !          MAXLINEWIDTHS+MAXLINETYPES+MAXLINESTYLES, 1,
  393. !          MAXLINEWIDTHS+MAXLINETYPES+MAXLINESTYLES,
  394.            fore_colors, lineStylePixmap, SINGLECOLOR);
  395.      if (index == INVALID) return;
  396. --- 626,644 ----
  397.      int        index, ltx, lty, rbx, rby, * fore_colors, * valid;
  398.   
  399. ! /* DefaultColorArrays (MAXLINEWIDTHS+MAXLINETYPES+MAXLINESTYLES, &fore_colors, */
  400. ! /*       &valid); */
  401. ! /* cfree (valid); */
  402. ! /* index = PxMpMenuLoop (X, Y, menuImageW, menuImageH, */
  403. ! /*       MAXLINEWIDTHS+MAXLINETYPES+MAXLINESTYLES, 1, */
  404. ! /*       MAXLINEWIDTHS+MAXLINETYPES+MAXLINESTYLES, */
  405. ! /*       fore_colors, lineStylePixmap, SINGLECOLOR); */
  406. ! /* if (index == INVALID) return; */
  407. !    DefaultColorArrays (MAXLINEWIDTHS+MAXLINETYPES+MAXDASHES+MAXLINESTYLES,
  408. !          &fore_colors, &valid);
  409.      cfree (valid);
  410.      index = PxMpMenuLoop (X, Y, menuImageW, menuImageH,
  411. !          MAXLINEWIDTHS+MAXLINETYPES+MAXDASHES+MAXLINESTYLES, 1,
  412. !          MAXLINEWIDTHS+MAXLINETYPES+MAXDASHES+MAXLINESTYLES,
  413.            fore_colors, lineStylePixmap, SINGLECOLOR);
  414.      if (index == INVALID) return;
  415. ***************
  416. *** 523,528 ****
  417.      else if (index < MAXLINEWIDTHS+MAXLINETYPES)
  418.         ChangeAllSelLineType (index - MAXLINEWIDTHS);
  419.      else
  420. !       ChangeAllSelLineStyle (index - MAXLINEWIDTHS - MAXLINETYPES);
  421.   }
  422.   
  423. --- 648,655 ----
  424.      else if (index < MAXLINEWIDTHS+MAXLINETYPES)
  425.         ChangeAllSelLineType (index - MAXLINEWIDTHS);
  426. +    else if (index < MAXLINEWIDTHS+MAXLINETYPES+MAXDASHES)
  427. +       ChangeAllSelDashes (index - MAXLINEWIDTHS - MAXLINETYPES);
  428.      else
  429. !       ChangeAllSelLineStyle (index - MAXLINEWIDTHS - MAXLINETYPES - MAXDASHES);
  430.   }
  431.   
  432. *** poly.c.orig    Wed Dec 12 14:36:51 1990
  433. --- poly.c    Wed Dec 12 14:36:54 1990
  434. ***************
  435. *** 6,10 ****
  436.   #ifndef lint
  437.   static char RCSid[] =
  438. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/poly.c,v 1.6 90/08/13 09:23:49 william Exp $";
  439.   #endif
  440.   
  441. --- 6,10 ----
  442.   #ifndef lint
  443.   static char RCSid[] =
  444. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/poly.c,v 1.10 90/11/10 13:51:04 william Exp $";
  445.   #endif
  446.   
  447. ***************
  448. *** 117,120 ****
  449. --- 117,121 ----
  450.      poly_ptr->curved = curSpline;
  451.      poly_ptr->fill = objFill;
  452. +    poly_ptr->dash = curDash;
  453.      obj_ptr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
  454.      obj_ptr->color = colorIndex;
  455. ***************
  456. *** 175,181 ****
  457.    */
  458.   
  459. ! void MyLine (Win,Cont,Rb,N,StartX,StartY,EndX,EndY,W,S,P,Pix)
  460.      Window    Win;
  461. !    int        Cont, Rb, N, StartX, StartY, EndX, EndY, W, S, P, Pix;
  462.      /* 'Cont' means continue */
  463.      /* 'Rb' means rubber-band */
  464. --- 176,182 ----
  465.    */
  466.   
  467. ! void MyLine (Win,Cont,Rb,N,StartX,StartY,EndX,EndY,W,S,P,Pix,Dash)
  468.      Window    Win;
  469. !    int        Cont, Rb, N, StartX, StartY, EndX, EndY, W, S, P, Pix, Dash;
  470.      /* 'Cont' means continue */
  471.      /* 'Rb' means rubber-band */
  472. ***************
  473. *** 245,250 ****
  474.         values.fill_style = FillSolid;
  475.         values.line_width = 0;
  476.         XChangeGC (mainDisplay, drawGC,
  477. !             GCForeground | GCFunction | GCFillStyle | GCLineWidth, &values);
  478.      }
  479.      else if (P != 0)
  480. --- 246,253 ----
  481.         values.fill_style = FillSolid;
  482.         values.line_width = 0;
  483. +       values.line_style = LineSolid;
  484.         XChangeGC (mainDisplay, drawGC,
  485. !             GCForeground | GCFunction | GCFillStyle | GCLineWidth | GCLineStyle,
  486. !             &values);
  487.      }
  488.      else if (P != 0)
  489. ***************
  490. *** 255,261 ****
  491.         values.stipple = patPixmap[P];
  492.         values.line_width = widthOfLine[W] >> zoomScale;
  493.         XChangeGC (mainDisplay, drawGC,
  494. !             GCForeground | GCFunction | GCFillStyle | GCStipple | GCLineWidth,
  495. !             &values);
  496.      }
  497.      else
  498. --- 258,272 ----
  499.         values.stipple = patPixmap[P];
  500.         values.line_width = widthOfLine[W] >> zoomScale;
  501. +       if (Dash != 0)
  502. +       {
  503. +          XSetDashes (mainDisplay, drawGC, 0, dashList[Dash],
  504. +                dashListLength[Dash]);
  505. +          values.line_style = LineOnOffDash;
  506. +       }
  507. +       else
  508. +          values.line_style = LineSolid;
  509.         XChangeGC (mainDisplay, drawGC,
  510. !             GCForeground | GCFunction | GCFillStyle | GCStipple | GCLineWidth |
  511. !             GCLineStyle, &values);
  512.      }
  513.      else
  514. ***************
  515. *** 344,350 ****
  516.      values.fill_style = FillSolid;
  517.      values.line_width = 0;
  518.   
  519.      XChangeGC (mainDisplay, drawGC,
  520. !          GCForeground | GCFunction | GCFillStyle | GCLineWidth,
  521.            &values);
  522.   
  523. --- 355,362 ----
  524.      values.fill_style = FillSolid;
  525.      values.line_width = 0;
  526. +    values.line_style = LineSolid;
  527.   
  528.      XChangeGC (mainDisplay, drawGC,
  529. !          GCForeground | GCFunction | GCFillStyle | GCLineWidth | GCLineStyle,
  530.            &values);
  531.   
  532. ***************
  533. *** 362,366 ****
  534.            motion_ev = &(input.xmotion);
  535.            MyLine (drawWindow, CONT, RB, num_pts, OrigX, OrigY, grid_x,
  536. !                grid_y, lineWidth, lineStyle, penPat, xor_pixel);
  537.   
  538.            end_x = motion_ev->x;
  539. --- 374,378 ----
  540.            motion_ev = &(input.xmotion);
  541.            MyLine (drawWindow, CONT, RB, num_pts, OrigX, OrigY, grid_x,
  542. !                grid_y, lineWidth, lineStyle, penPat, xor_pixel,0);
  543.   
  544.            end_x = motion_ev->x;
  545. ***************
  546. *** 369,373 ****
  547.            MarkRulers (grid_x, grid_y);
  548.            MyLine (drawWindow, CONT, RB, num_pts, OrigX, OrigY, grid_x,
  549. !                grid_y, lineWidth, lineStyle, penPat, xor_pixel);
  550.            while (XCheckMaskEvent (mainDisplay, PointerMotionMask, &ev)) ;
  551.         }
  552. --- 381,385 ----
  553.            MarkRulers (grid_x, grid_y);
  554.            MyLine (drawWindow, CONT, RB, num_pts, OrigX, OrigY, grid_x,
  555. !                grid_y, lineWidth, lineStyle, penPat, xor_pixel,0);
  556.            while (XCheckMaskEvent (mainDisplay, PointerMotionMask, &ev)) ;
  557.         }
  558. ***************
  559. *** 376,380 ****
  560.            button_ev = &(input.xbutton);
  561.            MyLine (drawWindow, CONT, RB, num_pts, OrigX, OrigY, grid_x,
  562. !                grid_y, lineWidth, lineStyle, penPat, xor_pixel);
  563.   
  564.            GridXY (end_x, end_y, &grid_x, &grid_y);
  565. --- 388,392 ----
  566.            button_ev = &(input.xbutton);
  567.            MyLine (drawWindow, CONT, RB, num_pts, OrigX, OrigY, grid_x,
  568. !                grid_y, lineWidth, lineStyle, penPat, xor_pixel,0);
  569.   
  570.            GridXY (end_x, end_y, &grid_x, &grid_y);
  571. ***************
  572. *** 394,398 ****
  573.                     MyLine (drawWindow, CONT, NORB, num_pts-1, OrigX, OrigY,
  574.                           grid_x, grid_y, lineWidth, lineStyle, penPat,
  575. !                         pixel);
  576.                  OrigX = grid_x;
  577.                  OrigY = grid_y;
  578. --- 406,410 ----
  579.                     MyLine (drawWindow, CONT, NORB, num_pts-1, OrigX, OrigY,
  580.                           grid_x, grid_y, lineWidth, lineStyle, penPat,
  581. !                         pixel,0);
  582.                  OrigX = grid_x;
  583.                  OrigY = grid_y;
  584. ***************
  585. *** 404,408 ****
  586.                     MyLine (drawWindow, NOCONT, NORB, num_pts-1, OrigX,
  587.                           OrigY, grid_x, grid_y, lineWidth, lineStyle,
  588. !                         penPat, pixel);
  589.   
  590.                  done = TRUE;
  591. --- 416,420 ----
  592.                     MyLine (drawWindow, NOCONT, NORB, num_pts-1, OrigX,
  593.                           OrigY, grid_x, grid_y, lineWidth, lineStyle,
  594. !                         penPat, pixel,0);
  595.   
  596.                  done = TRUE;
  597. ***************
  598. *** 416,424 ****
  599.      {
  600.         CreatePolyObj (num_pts);
  601. !       if (topObj->detail.p->curved == LT_SPLINE ||
  602. !             topObj->detail.p->fill != NONEPAT)
  603. !          RedrawAnArea (botObj, topObj->bbox.ltx-(1<<zoomScale),
  604. !                topObj->bbox.lty-(1<<zoomScale), topObj->bbox.rbx+(1<<zoomScale),
  605. !                topObj->bbox.rby+(1<<zoomScale));
  606.         polyDrawn = TRUE;
  607.         SetFileModified (TRUE);
  608. --- 428,434 ----
  609.      {
  610.         CreatePolyObj (num_pts);
  611. !       RedrawAnArea (botObj, topObj->bbox.ltx-(1<<zoomScale),
  612. !             topObj->bbox.lty-(1<<zoomScale), topObj->bbox.rbx+(1<<zoomScale),
  613. !             topObj->bbox.rby+(1<<zoomScale));
  614.         polyDrawn = TRUE;
  615.         SetFileModified (TRUE);
  616. ***************
  617. *** 473,477 ****
  618.   {
  619.      XPoint    * v;
  620. !    int        num_pts, fill, pen, width, curved, w, aw, ah, dy, dx;
  621.   
  622.      fill = ObjPtr->detail.p->fill;
  623. --- 483,488 ----
  624.   {
  625.      XPoint    * v;
  626. !    int        i, num_pts, fill, pen, width, curved, dash, color_index;
  627. !    int        w, aw, ah, dy, dx;
  628.   
  629.      fill = ObjPtr->detail.p->fill;
  630. ***************
  631. *** 479,485 ****
  632. --- 490,508 ----
  633.      pen = ObjPtr->detail.p->pen;
  634.      curved = ObjPtr->detail.p->curved;
  635. +    dash = ObjPtr->detail.p->dash;
  636.      v = ObjPtr->detail.p->vlist;
  637.      num_pts = ObjPtr->detail.p->n;
  638.   
  639. +    if (fill == NONEPAT && pen == NONEPAT) return;
  640. +    if (colorDump)
  641. +    {
  642. +       color_index = ObjPtr->color;
  643. +       fprintf (FP, "%.3f %.3f %.3f setrgbcolor\n",
  644. +             ((float)tgifColors[color_index].red/maxRGB),
  645. +             ((float)tgifColors[color_index].green/maxRGB),
  646. +             ((float)tgifColors[color_index].blue/maxRGB));
  647. +    }
  648.      if (fill != NONEPAT && num_pts > 2)
  649.      {
  650. ***************
  651. *** 545,549 ****
  652.      }
  653.   
  654. !    if (pen == NONEPAT) return;
  655.      fprintf (FP, "gsave\n");
  656.   
  657. --- 568,573 ----
  658.      }
  659.   
  660. !    if (pen == NONEPAT) { fprintf (FP, "\n"); return; }
  661.      fprintf (FP, "gsave\n");
  662.   
  663. ***************
  664. *** 562,565 ****
  665. --- 586,597 ----
  666.   
  667.      fprintf (FP, "   %1d setlinewidth\n", w);
  668. +    if (dash != 0)
  669. +    {
  670. +       fprintf (FP, "   [");
  671. +       for (i = 0; i < dashListLength[dash]-1; i++)
  672. +          fprintf (FP, "%1d ", (int)(dashList[dash][i]));
  673. +       fprintf (FP, "%1d] 0 setdash\n",
  674. +             (int)(dashList[dash][dashListLength[dash]-1]));
  675. +    }
  676.   
  677.      fprintf (FP, "newpath\n   %1d %1d moveto\n", v[0].x, v[0].y);
  678. ***************
  679. *** 622,626 ****
  680.      register struct PolyRec    * poly_ptr = ObjPtr->detail.p;
  681.      XPoint            * pv = poly_ptr->vlist, * v;
  682. !    int                pen, width, pixel, fill, curved, n;
  683.      int                x1, y1, x2, y2, ah, real_x_off, real_y_off;
  684.      Pixmap            tile;
  685. --- 654,658 ----
  686.      register struct PolyRec    * poly_ptr = ObjPtr->detail.p;
  687.      XPoint            * pv = poly_ptr->vlist, * v;
  688. !    int                pen, width, pixel, fill, curved, n, dash;
  689.      int                x1, y1, x2, y2, ah, real_x_off, real_y_off;
  690.      Pixmap            tile;
  691. ***************
  692. *** 632,639 ****
  693.      pen = poly_ptr->pen;
  694.      curved = poly_ptr->curved;
  695.      pixel = colorPixels[ObjPtr->color];
  696.   
  697.      if (curved == LT_SPLINE)
  698. !       DrawSplinePolyObj (Win, XOff, YOff, fill, width, pen, pixel, poly_ptr);
  699.      else
  700.      {
  701. --- 664,673 ----
  702.      pen = poly_ptr->pen;
  703.      curved = poly_ptr->curved;
  704. +    dash = poly_ptr->dash;
  705.      pixel = colorPixels[ObjPtr->color];
  706.   
  707.      if (curved == LT_SPLINE)
  708. !       DrawSplinePolyObj (Win, XOff, YOff, fill, width, pen, dash, pixel,
  709. !             poly_ptr);
  710.      else
  711.      {
  712. ***************
  713. *** 671,675 ****
  714.   
  715.            MyLine (Win, CONT, NORB, i+1, x1, y1, x2, y2, poly_ptr->width,
  716. !                poly_ptr->style, pen, pixel);
  717.         }
  718.         x1 = (pv[i].x-real_x_off)>>zoomScale;
  719. --- 705,709 ----
  720.   
  721.            MyLine (Win, CONT, NORB, i+1, x1, y1, x2, y2, poly_ptr->width,
  722. !                poly_ptr->style, pen, pixel, dash);
  723.         }
  724.         x1 = (pv[i].x-real_x_off)>>zoomScale;
  725. ***************
  726. *** 679,683 ****
  727.   
  728.         MyLine (Win, NOCONT, NORB, i+1, x1, y1, x2, y2, poly_ptr->width,
  729. !             poly_ptr->style, pen, pixel);
  730.      }
  731.   }
  732. --- 713,717 ----
  733.   
  734.         MyLine (Win, NOCONT, NORB, i+1, x1, y1, x2, y2, poly_ptr->width,
  735. !             poly_ptr->style, pen, pixel, dash);
  736.      }
  737.   }
  738. ***************
  739. *** 691,695 ****
  740.   
  741.      n = poly_ptr->n;
  742. !    fprintf (FP, "poly(%s,%1d,[", colorMenuItems[ObjPtr->color], poly_ptr->n);
  743.      for (i = 0; i < n-1; i++)
  744.      {
  745. --- 725,729 ----
  746.   
  747.      n = poly_ptr->n;
  748. !    fprintf (FP, "poly('%s',%1d,[", colorMenuItems[ObjPtr->color], poly_ptr->n);
  749.      for (i = 0; i < n-1; i++)
  750.      {
  751. ***************
  752. *** 697,702 ****
  753.      }
  754.      fprintf (FP, "%1d,%1d", poly_ptr->vlist[n-1].x, poly_ptr->vlist[n-1].y);
  755. !    fprintf (FP, "],%1d,%1d,%1d,%1d,%1d,%1d,", poly_ptr->style, poly_ptr->width,
  756. !          poly_ptr->pen, ObjPtr->id, poly_ptr->curved, poly_ptr->fill);
  757.      SaveAttrs (FP, ObjPtr->lattr);
  758.      fprintf (FP, ")");
  759. --- 731,736 ----
  760.      }
  761.      fprintf (FP, "%1d,%1d", poly_ptr->vlist[n-1].x, poly_ptr->vlist[n-1].y);
  762. !    fprintf (FP, "],%1d,%1d,%1d,%1d,%1d,%1d,%1d,", poly_ptr->style, poly_ptr->width,
  763. !          poly_ptr->pen, ObjPtr->id, poly_ptr->curved, poly_ptr->fill, poly_ptr->dash);
  764.      SaveAttrs (FP, ObjPtr->lattr);
  765.      fprintf (FP, ")");
  766. ***************
  767. *** 754,757 ****
  768. --- 788,792 ----
  769.            case 2: poly_ptr->width = 6; break;
  770.         }
  771. +       poly_ptr->dash = 0;
  772.      }
  773.      else if (fileVersion <= 3)
  774. ***************
  775. *** 773,776 ****
  776. --- 808,812 ----
  777.            case 2: poly_ptr->width = 6; break;
  778.         }
  779. +       poly_ptr->dash = 0;
  780.      }
  781.      else if (fileVersion <= 4)
  782. ***************
  783. *** 786,789 ****
  784. --- 822,826 ----
  785.            case 2: poly_ptr->width = 6; break;
  786.         }
  787. +       poly_ptr->dash = 0;
  788.      }
  789.      else if (fileVersion <= 5)
  790. ***************
  791. *** 798,803 ****
  792.            case 2: poly_ptr->width = 6; break;
  793.         }
  794.      }
  795. !    else
  796.      {
  797.         sscanf (s, "%d , %d , %d , %d, %d, %d", &(poly_ptr->style),
  798. --- 835,841 ----
  799.            case 2: poly_ptr->width = 6; break;
  800.         }
  801. +       poly_ptr->dash = 0;
  802.      }
  803. !    else if (fileVersion <= 8)
  804.      {
  805.         sscanf (s, "%d , %d , %d , %d, %d, %d", &(poly_ptr->style),
  806. ***************
  807. *** 804,807 ****
  808. --- 842,853 ----
  809.               &(poly_ptr->width), &(poly_ptr->pen), &((*ObjPtr)->id),
  810.               &(poly_ptr->curved), &(poly_ptr->fill));
  811. +       if ((*ObjPtr)->id >= objId) objId = (*ObjPtr)->id + 1;
  812. +       poly_ptr->dash = 0;
  813. +    }
  814. +    else
  815. +    {
  816. +       sscanf (s, "%d , %d , %d , %d , %d , %d , %d", &(poly_ptr->style),
  817. +             &(poly_ptr->width), &(poly_ptr->pen), &((*ObjPtr)->id),
  818. +             &(poly_ptr->curved), &(poly_ptr->fill), &(poly_ptr->dash));
  819.         if ((*ObjPtr)->id >= objId) objId = (*ObjPtr)->id + 1;
  820.      }
  821. *** polygon.c.orig    Wed Dec 12 14:37:07 1990
  822. --- polygon.c    Wed Dec 12 14:37:09 1990
  823. ***************
  824. *** 6,10 ****
  825.   #ifndef lint
  826.   static char RCSid[] =
  827. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/polygon.c,v 1.5 90/08/13 09:23:36 william Exp $";
  828.   #endif
  829.   
  830. --- 6,10 ----
  831.   #ifndef lint
  832.   static char RCSid[] =
  833. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/polygon.c,v 1.9 90/11/10 13:51:09 william Exp $";
  834.   #endif
  835.   
  836. ***************
  837. *** 52,56 ****
  838.   {
  839.      XPoint    * v = ObjPtr->detail.g->vlist;
  840. !    int        num_pts = ObjPtr->detail.g->n, fill, width, pen, curved;
  841.   
  842.      fill = ObjPtr->detail.g->fill;
  843. --- 52,57 ----
  844.   {
  845.      XPoint    * v = ObjPtr->detail.g->vlist;
  846. !    int        num_pts = ObjPtr->detail.g->n, i;
  847. !    int        fill, width, pen, curved, dash, color_index;
  848.   
  849.      fill = ObjPtr->detail.g->fill;
  850. ***************
  851. *** 58,62 ****
  852. --- 59,75 ----
  853.      pen = ObjPtr->detail.g->pen;
  854.      curved = ObjPtr->detail.g->curved;
  855. +    dash = ObjPtr->detail.g->dash;
  856.   
  857. +    if (fill == NONEPAT && pen == NONEPAT) return;
  858. +    if (colorDump)
  859. +    {
  860. +       color_index = ObjPtr->color;
  861. +       fprintf (FP, "%.3f %.3f %.3f setrgbcolor\n",
  862. +             ((float)tgifColors[color_index].red/maxRGB),
  863. +             ((float)tgifColors[color_index].green/maxRGB),
  864. +             ((float)tgifColors[color_index].blue/maxRGB));
  865. +    }
  866.      if (fill != NONEPAT)
  867.      {
  868. ***************
  869. *** 115,177 ****
  870.      }
  871.   
  872. !    if (pen != NONEPAT)
  873.      {
  874. !       fprintf (FP, "%1d setlinewidth\n", widthOfLine[width]);
  875.   
  876. !       switch (curved)
  877. !       {
  878. !          case LT_STRAIGHT:
  879. !             switch (pen)
  880. !             {
  881. !                case SOLIDPAT:
  882. !                   fprintf (FP, "newpath\n   %1d %1d moveto\n", v[0].x, v[0].y);
  883. !                   DumpPoints (FP, num_pts-1, v, 3);
  884. !                   fprintf (FP, "closepath stroke\n");
  885. !                   break;
  886. !                case BACKPAT:
  887. !                   fprintf (FP, "newpath\n   %1d %1d moveto\n", v[0].x, v[0].y);
  888. !                   DumpPoints (FP, num_pts-1, v, 3);
  889. !                   fprintf (FP, "closepath 1 setgray stroke 0 setgray\n");
  890. !                   break;
  891. !                default:
  892. !                   fprintf (FP, "gsave\n");
  893. !                   fprintf (FP, "   pat%1d 8 1 0 72 300 32 div div setpattern\n",
  894. !                         pen);
  895. !                   fprintf (FP, "   newpath\n");
  896. !                   fprintf (FP, "      %1d %1d moveto\n", v[0].x, v[0].y);
  897. !                   DumpPoints (FP, num_pts-1, v, 6);
  898. !                   fprintf (FP, "   closepath stroke\n");
  899. !                   fprintf (FP, "grestore\n");
  900. !                   break;
  901. !             }
  902. !             break;
  903. !          case LT_SPLINE:
  904. !             switch (pen)
  905. !             {
  906. !                case SOLIDPAT:
  907. !                   fprintf (FP, "newpath\n");
  908. !                   DumpCurvedPolygonPoints (FP, num_pts, v, 3);
  909. !                   fprintf (FP, "closepath stroke\n");
  910. !                   break;
  911. !                case BACKPAT:
  912. !                   fprintf (FP, "newpath\n");
  913. !                   DumpCurvedPolygonPoints (FP, num_pts, v, 3);
  914. !                   fprintf (FP, "closepath 1 setgray stroke 0 setgray\n");
  915. !                   break;
  916. !                default:
  917. !                   fprintf (FP, "gsave\n");
  918. !                   fprintf (FP, "   pat%1d 8 1 0 72 300 32 div div setpattern\n",
  919. !                         pen);
  920. !                   fprintf (FP, "   newpath\n");
  921. !                   DumpCurvedPolygonPoints (FP, num_pts, v, 6);
  922. !                   fprintf (FP, "   closepath stroke\n");
  923. !                   fprintf (FP, "grestore\n");
  924. !                   break;
  925. !             }
  926. !             break;
  927. !       }
  928. !       fprintf (FP, "1 setlinewidth\n");
  929.      }
  930. !    fprintf (FP, "\n");
  931.   }
  932.   
  933. --- 128,197 ----
  934.      }
  935.   
  936. !    if (pen == NONEPAT) { fprintf (FP, "\n"); return; }
  937. !    fprintf (FP, "%1d setlinewidth\n", widthOfLine[width]);
  938. !    if (dash != 0)
  939.      {
  940. !       fprintf (FP, "[");
  941. !       for (i = 0; i < dashListLength[dash]-1; i++)
  942. !          fprintf (FP, "%1d ", (int)(dashList[dash][i]));
  943. !       fprintf (FP, "%1d] 0 setdash\n",
  944. !             (int)(dashList[dash][dashListLength[dash]-1]));
  945. !    }
  946.   
  947. !    switch (curved)
  948. !    {
  949. !       case LT_STRAIGHT:
  950. !          switch (pen)
  951. !          {
  952. !             case SOLIDPAT:
  953. !                fprintf (FP, "newpath\n   %1d %1d moveto\n", v[0].x, v[0].y);
  954. !                DumpPoints (FP, num_pts-1, v, 3);
  955. !                fprintf (FP, "closepath stroke\n");
  956. !                break;
  957. !             case BACKPAT:
  958. !                fprintf (FP, "newpath\n   %1d %1d moveto\n", v[0].x, v[0].y);
  959. !                DumpPoints (FP, num_pts-1, v, 3);
  960. !                fprintf (FP, "closepath 1 setgray stroke 0 setgray\n");
  961. !                break;
  962. !             default:
  963. !                fprintf (FP, "gsave\n");
  964. !                fprintf (FP, "   pat%1d 8 1 0 72 300 32 div div setpattern\n",
  965. !                      pen);
  966. !                fprintf (FP, "   newpath\n");
  967. !                fprintf (FP, "      %1d %1d moveto\n", v[0].x, v[0].y);
  968. !                DumpPoints (FP, num_pts-1, v, 6);
  969. !                fprintf (FP, "   closepath stroke\n");
  970. !                fprintf (FP, "grestore\n");
  971. !                break;
  972. !          }
  973. !          break;
  974. !       case LT_SPLINE:
  975. !          switch (pen)
  976. !          {
  977. !             case SOLIDPAT:
  978. !                fprintf (FP, "newpath\n");
  979. !                DumpCurvedPolygonPoints (FP, num_pts, v, 3);
  980. !                fprintf (FP, "closepath stroke\n");
  981. !                break;
  982. !             case BACKPAT:
  983. !                fprintf (FP, "newpath\n");
  984. !                DumpCurvedPolygonPoints (FP, num_pts, v, 3);
  985. !                fprintf (FP, "closepath 1 setgray stroke 0 setgray\n");
  986. !                break;
  987. !             default:
  988. !                fprintf (FP, "gsave\n");
  989. !                fprintf (FP, "   pat%1d 8 1 0 72 300 32 div div setpattern\n",
  990. !                      pen);
  991. !                fprintf (FP, "   newpath\n");
  992. !                DumpCurvedPolygonPoints (FP, num_pts, v, 6);
  993. !                fprintf (FP, "   closepath stroke\n");
  994. !                fprintf (FP, "grestore\n");
  995. !                break;
  996. !          }
  997. !          break;
  998.      }
  999. !    if (dash != 0) fprintf (FP, "[] 0 setdash\n");
  1000. !    fprintf (FP, "1 setlinewidth\n\n");
  1001.   }
  1002.   
  1003. ***************
  1004. *** 184,188 ****
  1005.      XPoint        * v;
  1006.      struct PolygonRec    * polygon_ptr = ObjPtr->detail.g;
  1007. !    int            fill, width, pen, curved, pixel;
  1008.      int            real_x_off, real_y_off;
  1009.      XGCValues        values;
  1010. --- 204,208 ----
  1011.      XPoint        * v;
  1012.      struct PolygonRec    * polygon_ptr = ObjPtr->detail.g;
  1013. !    int            fill, width, pen, curved, dash, pixel;
  1014.      int            real_x_off, real_y_off;
  1015.      XGCValues        values;
  1016. ***************
  1017. *** 192,199 ****
  1018.      pen = polygon_ptr->pen;
  1019.      curved = polygon_ptr->curved;
  1020.      pixel = colorPixels[ObjPtr->color];
  1021.   
  1022.      if (curved == LT_SPLINE)
  1023. !       DrawSplinePolygonObj (Win, XOff, YOff, fill, width, pen, pixel,
  1024.               polygon_ptr);
  1025.      else
  1026. --- 212,220 ----
  1027.      pen = polygon_ptr->pen;
  1028.      curved = polygon_ptr->curved;
  1029. +    dash = polygon_ptr->dash;
  1030.      pixel = colorPixels[ObjPtr->color];
  1031.   
  1032.      if (curved == LT_SPLINE)
  1033. !       DrawSplinePolygonObj (Win, XOff, YOff, fill, width, pen, dash, pixel,
  1034.               polygon_ptr);
  1035.      else
  1036. ***************
  1037. *** 228,234 ****
  1038.            values.stipple = patPixmap[pen];
  1039.            values.line_width = widthOfLine[width] >> zoomScale;
  1040.            XChangeGC (mainDisplay, drawGC,
  1041.                  GCForeground | GCFunction | GCFillStyle | GCStipple |
  1042. !                GCLineWidth, &values);
  1043.   
  1044.            XDrawLines (mainDisplay, Win, drawGC, v, polygon_ptr->n,
  1045. --- 249,263 ----
  1046.            values.stipple = patPixmap[pen];
  1047.            values.line_width = widthOfLine[width] >> zoomScale;
  1048. +          if (dash != 0)
  1049. +          {
  1050. +             XSetDashes (mainDisplay, drawGC, 0, dashList[dash],
  1051. +                   dashListLength[dash]);
  1052. +             values.line_style = LineOnOffDash;
  1053. +          }
  1054. +          else
  1055. +             values.line_style = LineSolid;
  1056.            XChangeGC (mainDisplay, drawGC,
  1057.                  GCForeground | GCFunction | GCFillStyle | GCStipple |
  1058. !                GCLineWidth | GCLineStyle, &values);
  1059.   
  1060.            XDrawLines (mainDisplay, Win, drawGC, v, polygon_ptr->n,
  1061. ***************
  1062. *** 274,277 ****
  1063. --- 303,307 ----
  1064.      polygon_ptr->pen = penPat;
  1065.      polygon_ptr->curved = curSpline;
  1066. +    polygon_ptr->dash = curDash;
  1067.      obj_ptr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
  1068.      obj_ptr->color = colorIndex;
  1069. ***************
  1070. *** 320,326 ****
  1071.      values.fill_style = FillSolid;
  1072.      values.line_width = 0;
  1073.   
  1074.      XChangeGC (mainDisplay, drawGC,
  1075. !          GCForeground | GCFunction | GCFillStyle | GCLineWidth,
  1076.            &values);
  1077.   
  1078. --- 350,357 ----
  1079.      values.fill_style = FillSolid;
  1080.      values.line_width = 0;
  1081. +    values.line_style = LineSolid;
  1082.   
  1083.      XChangeGC (mainDisplay, drawGC,
  1084. !          GCForeground | GCFunction | GCFillStyle | GCLineWidth | GCLineStyle,
  1085.            &values);
  1086.   
  1087. ***************
  1088. *** 450,461 ****
  1089.         default:
  1090.            CreatePolygonObj (num_pts);
  1091. !          if (topObj->detail.g->curved == LT_SPLINE)
  1092. !             RedrawAnArea (botObj, topObj->bbox.ltx-(1<<zoomScale),
  1093. !                   topObj->bbox.lty-(1<<zoomScale),
  1094. !                   topObj->bbox.rbx+(1<<zoomScale),
  1095. !                   topObj->bbox.rby+(1<<zoomScale));
  1096. !          else if (objFill != 0)
  1097. !             DrawPolygonObj (drawWindow, drawOrigX, drawOrigY, topObj);
  1098.            polygonDrawn = TRUE;
  1099.            SetFileModified (TRUE);
  1100. --- 481,488 ----
  1101.         default:
  1102.            CreatePolygonObj (num_pts);
  1103. !          RedrawAnArea (botObj, topObj->bbox.ltx-(1<<zoomScale),
  1104. !                topObj->bbox.lty-(1<<zoomScale),
  1105. !                topObj->bbox.rbx+(1<<zoomScale),
  1106. !                topObj->bbox.rby+(1<<zoomScale));
  1107.            polygonDrawn = TRUE;
  1108.            SetFileModified (TRUE);
  1109. ***************
  1110. *** 497,501 ****
  1111.   
  1112.      n = polygon_ptr->n;
  1113. !    fprintf (FP, "polygon(%s,%1d,[", colorMenuItems[ObjPtr->color],
  1114.            polygon_ptr->n);
  1115.      for (i = 0; i < n-1; i++)
  1116. --- 524,528 ----
  1117.   
  1118.      n = polygon_ptr->n;
  1119. !    fprintf (FP, "polygon('%s',%1d,[", colorMenuItems[ObjPtr->color],
  1120.            polygon_ptr->n);
  1121.      for (i = 0; i < n-1; i++)
  1122. ***************
  1123. *** 502,508 ****
  1124.         fprintf (FP, "%1d,%1d,", polygon_ptr->vlist[i].x, polygon_ptr->vlist[i].y);
  1125.   
  1126. !    fprintf (FP, "%1d,%1d],%1d,%1d,%1d,%1d,%1d,", polygon_ptr->vlist[n-1].x,
  1127.            polygon_ptr->vlist[n-1].y, polygon_ptr->fill, polygon_ptr->width,
  1128. !          polygon_ptr->pen, polygon_ptr->curved, ObjPtr->id);
  1129.      SaveAttrs (FP, ObjPtr->lattr);
  1130.      fprintf (FP, ")");
  1131. --- 529,535 ----
  1132.         fprintf (FP, "%1d,%1d,", polygon_ptr->vlist[i].x, polygon_ptr->vlist[i].y);
  1133.   
  1134. !    fprintf (FP, "%1d,%1d],%1d,%1d,%1d,%1d,%1d,%1d,", polygon_ptr->vlist[n-1].x,
  1135.            polygon_ptr->vlist[n-1].y, polygon_ptr->fill, polygon_ptr->width,
  1136. !          polygon_ptr->pen, polygon_ptr->curved, ObjPtr->id, polygon_ptr->dash);
  1137.      SaveAttrs (FP, ObjPtr->lattr);
  1138.      fprintf (FP, ")");
  1139. ***************
  1140. *** 518,522 ****
  1141.      char            color_str[20], * s;
  1142.      int            num_pts, ltx, lty, rbx, rby, x, y, fill, width, pen, w;
  1143. !    int            curved;
  1144.   
  1145.      * ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
  1146. --- 545,549 ----
  1147.      char            color_str[20], * s;
  1148.      int            num_pts, ltx, lty, rbx, rby, x, y, fill, width, pen, w;
  1149. !    int            curved, dash;
  1150.   
  1151.      * ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
  1152. ***************
  1153. *** 559,562 ****
  1154. --- 586,590 ----
  1155.         }
  1156.         (*ObjPtr)->id = objId++;
  1157. +       dash = 0;
  1158.      }
  1159.      else if (fileVersion <= 5)
  1160. ***************
  1161. *** 569,572 ****
  1162. --- 597,601 ----
  1163.         }
  1164.         (*ObjPtr)->id = objId++;
  1165. +       dash = 0;
  1166.      }
  1167.      else if (fileVersion <= 7)
  1168. ***************
  1169. *** 574,579 ****
  1170.         sscanf (s, "%d , %d , %d , %d", &fill, &width, &pen, &curved);
  1171.         (*ObjPtr)->id = objId++;
  1172.      }
  1173. !    else
  1174.      {
  1175.         sscanf (s, "%d , %d , %d , %d , %d", &fill, &width, &pen, &curved,
  1176. --- 603,609 ----
  1177.         sscanf (s, "%d , %d , %d , %d", &fill, &width, &pen, &curved);
  1178.         (*ObjPtr)->id = objId++;
  1179. +       dash = 0;
  1180.      }
  1181. !    else if (fileVersion <= 8)
  1182.      {
  1183.         sscanf (s, "%d , %d , %d , %d , %d", &fill, &width, &pen, &curved,
  1184. ***************
  1185. *** 580,584 ****
  1186. --- 610,621 ----
  1187.               &((*ObjPtr)->id));
  1188.         if ((*ObjPtr)->id >= objId) objId = (*ObjPtr)->id + 1;
  1189. +       dash = 0;
  1190.      }
  1191. +    else
  1192. +    {
  1193. +       sscanf (s, "%d , %d , %d , %d , %d , %d", &fill, &width, &pen, &curved,
  1194. +             &((*ObjPtr)->id), &dash);
  1195. +       if ((*ObjPtr)->id >= objId) objId = (*ObjPtr)->id + 1;
  1196. +    }
  1197.   
  1198.      polygon_ptr->vlist = v;
  1199. ***************
  1200. *** 590,593 ****
  1201. --- 627,631 ----
  1202.      polygon_ptr->pen = pen;
  1203.      polygon_ptr->curved = curved;
  1204. +    polygon_ptr->dash = dash;
  1205.      (*ObjPtr)->x = ltx;
  1206.      (*ObjPtr)->y = lty;
  1207. *** prtgif.c.orig    Wed Dec 12 14:37:17 1990
  1208. --- prtgif.c    Wed Dec 12 14:37:19 1990
  1209. ***************
  1210. *** 6,10 ****
  1211.   #ifndef lint
  1212.   static char RCSid[] =
  1213. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/prtgif.c,v 1.16 90/08/16 15:28:30 william Exp $";
  1214.   #endif
  1215.   
  1216. --- 6,10 ----
  1217.   #ifndef lint
  1218.   static char RCSid[] =
  1219. !       "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/prtgif.c,v 1.17 90/11/01 13:49:48 william Exp $";
  1220.   #endif
  1221.   
  1222. ***************
  1223. *** 108,119 ****
  1224.      struct ObjRec    * obj_ptr;
  1225.      char         full_name[MAXPATHLENGTH];
  1226.      FILE            * fp;
  1227.   
  1228. !    strcpy (full_name, FileName);
  1229. !    strcat (full_name, ".obj");
  1230.   
  1231.      if ((fp = fopen (full_name, "r")) == NULL)
  1232.      {
  1233. !       printf ("Can not open '%s'.", full_name);
  1234.         return (FALSE);
  1235.      }
  1236. --- 108,123 ----
  1237.      struct ObjRec    * obj_ptr;
  1238.      char         full_name[MAXPATHLENGTH];
  1239. +    int            len;
  1240.      FILE            * fp;
  1241.   
  1242. !    len = strlen (FileName);
  1243. !    if (len >= 4 && strcmp (&FileName[len-4], ".obj") == 0)
  1244. !       strcpy (full_name, FileName);
  1245. !    else
  1246. !       sprintf (full_name, "%s.obj", FileName);
  1247.   
  1248.      if ((fp = fopen (full_name, "r")) == NULL)
  1249.      {
  1250. !       printf ("Can not open '%s'.\n", full_name);
  1251.         return (FALSE);
  1252.      }
  1253. ---------------------------------> cut here <---------------------------------
  1254. -- 
  1255. Bill Cheng // UCLA Computer Science Department // (213) 206-7135
  1256. 3277 Boelter Hall // Los Angeles, California 90024 // USA
  1257. william@CS.UCLA.EDU      ...!{uunet|ucbvax}!cs.ucla.edu!william
  1258.  
  1259. --
  1260. Dan Heller
  1261. ------------------------------------------------
  1262. O'Reilly && Associates               Zyrcom Inc
  1263. Senior Writer                   President
  1264. argv@ora.com            argv@zipcode.com
  1265.